UNION 和 UNION ALL
1. 概述
在 SQL 中,UNION 和 UNION ALL 是用于合并两个或多个 SELECT 语句结果集的操作符。它们允许你将多个查询的结果组合成一个结果集。UNION 和 UNION ALL 的主要区别在于 UNION 会自动去除重复的行,而 UNION ALL 则保留所有行,包括重复的行。
2. UNION 和 UNION ALL 的基本语法
SELECT column1, column2, ...
FROM table1
UNION [ALL]
SELECT column1, column2, ...
FROM table2;
UNION:合并两个SELECT语句的结果集,并去除重复的行。UNION ALL:合并两个SELECT语句的结果集,保留所有行,包括重复的行。
3. 示例
3.1 创建示例表
首先,我们创建两个示例表 employees1 和 employees2:
CREATE TABLE employees1 (
id INT PRIMARY KEY,
name VARCHAR(50),
department VARCHAR(50)
);
CREATE TABLE employees2 (
id INT PRIMARY KEY,
name VARCHAR(50),
department VARCHAR(50)
);
3.2 插入数据
向表中插入一些数据:
INSERT INTO employees1 (id, name, department) VALUES
(1, 'Alice', 'HR'),
(2, 'Bob', 'IT'),
(3, 'Charlie', 'Finance');
INSERT INTO employees2 (id, name, department) VALUES
(2, 'Bob', 'IT'),
(4, 'David', 'Marketing'),
(5, 'Eve', 'Sales');
3.3 使用 UNION
使用 UNION 合并两个表的数据:
SELECT name, department
FROM employees1
UNION
SELECT name, department
FROM employees2;
结果:
| name | department | |---------|------------| | Alice | HR | | Bob | IT | | Charlie | Finance | | David | Marketing | | Eve | Sales |
3.4 使用 UNION ALL
使用 UNION ALL 合并两个表的数据:
SELECT name, department
FROM employees1
UNION ALL
SELECT name, department
FROM employees2;
结果:
| name | department | |---------|------------| | Alice | HR | | Bob | IT | | Charlie | Finance | | Bob | IT | | David | Marketing | | Eve | Sales |
4. 注意事项
- 列数和数据类型:
UNION和UNION ALL要求两个SELECT语句的列数和对应列的数据类型必须匹配。 - 排序:如果需要对合并后的结果进行排序,可以在
UNION或UNION ALL之后使用ORDER BY子句。
5. 实践练习
5.1 练习 1
创建两个表 students1 和 students2,分别插入一些学生信息,然后使用 UNION 合并两个表的数据,并按学生姓名排序。
5.2 练习 2
创建两个表 orders1 和 orders2,分别插入一些订单信息,然后使用 UNION ALL 合并两个表的数据,并按订单金额排序。
6. 总结
UNION 和 UNION ALL 是 SQL 中非常有用的操作符,用于合并多个查询的结果集。UNION 去除重复行,而 UNION ALL 保留所有行。掌握这两个操作符可以帮助你更灵活地处理和分析数据。
通过本教程的学习,你应该能够理解 UNION 和 UNION ALL 的基本概念和用法,并能够在实际项目中应用它们。